#!/usr/bin/env node

/**
 * 创建默认图标
 * 生成一个简单的 FLAC 音乐播放器图标
 */

import { writeFileSync, existsSync, mkdirSync } from 'fs'
import { join, dirname, resolve } from 'path'
import { fileURLToPath } from 'url'

const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
const projectRoot = resolve(__dirname, '..')
const buildDir = join(projectRoot, 'build')
const outputPath = join(buildDir, 'default-icon.png')

// 确保 build 目录存在
if (!existsSync(buildDir)) {
  mkdirSync(buildDir, { recursive: true })
}

// 创建一个简单的 512x512 PNG 图标
// 使用纯白背景 + 清晰的音乐符号
const createSimplePNG = async () => {
  const size = 512
  
  try {
    // 尝试使用 sharp 包
    const sharp = (await import('sharp')).default
    
    // 创建 SVG 字符串（白色背景 + 紫色音乐符号）
    const svg = `
      <svg width="${size}" height="${size}" xmlns="http://www.w3.org/2000/svg">
        <!-- 纯白背景 -->
        <rect width="${size}" height="${size}" fill="#ffffff"/>
        
        <!-- 定义渐变 -->
        <defs>
          <linearGradient id="noteGradient" x1="0%" y1="0%" x2="100%" y2="100%">
            <stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
            <stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
          </linearGradient>
        </defs>
        
        <!-- 第一个音符 -->
        <g fill="url(#noteGradient)" stroke="url(#noteGradient)" stroke-width="8" stroke-linecap="round" stroke-linejoin="round">
          <!-- 音符主体（椭圆形） -->
          <ellipse cx="${size * 0.35}" cy="${size * 0.55}" rx="${size * 0.12}" ry="${size * 0.15}" transform="rotate(-15 ${size * 0.35} ${size * 0.55})"/>
          
          <!-- 音符杆 -->
          <line x1="${size * 0.47}" y1="${size * 0.25}" x2="${size * 0.47}" y2="${size * 0.7}" stroke-width="${size * 0.03}"/>
          
          <!-- 音符旗 -->
          <path d="M ${size * 0.47} ${size * 0.25} 
                   Q ${size * 0.65} ${size * 0.15} ${size * 0.7} ${size * 0.2}
                   L ${size * 0.6} ${size * 0.3}
                   Q ${size * 0.55} ${size * 0.25} ${size * 0.47} ${size * 0.25}
                   Z" fill="url(#noteGradient)"/>
        </g>
        
        <!-- 第二个音符 -->
        <g fill="url(#noteGradient)" stroke="url(#noteGradient)" stroke-width="8" stroke-linecap="round" stroke-linejoin="round">
          <!-- 音符主体 -->
          <ellipse cx="${size * 0.65}" cy="${size * 0.6}" rx="${size * 0.12}" ry="${size * 0.15}" transform="rotate(-15 ${size * 0.65} ${size * 0.6})"/>
          
          <!-- 音符杆 -->
          <line x1="${size * 0.77}" y1="${size * 0.2}" x2="${size * 0.77}" y2="${size * 0.75}" stroke-width="${size * 0.03}"/>
        </g>
      </svg>
    `
    
    // 使用 sharp 将 SVG 转换为 PNG
    const buffer = await sharp(Buffer.from(svg))
      .resize(size, size)
      .png()
      .toBuffer()
    
    writeFileSync(outputPath, buffer)
    
    console.log(`✅ 已创建默认图标: ${outputPath}`)
    console.log(`   背景: 纯白色`)
    console.log(`   图标: 紫色渐变音乐符号（两个音符）`)
    return outputPath
  } catch (error) {
    // 如果 sharp 不可用，尝试使用 canvas
    try {
      const { createCanvas } = require('canvas')
      const canvas = createCanvas(size, size)
      const ctx = canvas.getContext('2d')
      
      // 纯白背景
      ctx.fillStyle = '#ffffff'
      ctx.fillRect(0, 0, size, size)
      
      // 绘制音乐符号
      const centerX = size / 2
      const centerY = size / 2
      const iconSize = size * 0.6
      
      const gradient = ctx.createLinearGradient(centerX - iconSize/2, centerY - iconSize/2, centerX + iconSize/2, centerY + iconSize/2)
      gradient.addColorStop(0, '#667eea')
      gradient.addColorStop(1, '#764ba2')
      ctx.fillStyle = gradient
      ctx.strokeStyle = gradient
      ctx.lineWidth = iconSize / 15
      ctx.lineCap = 'round'
      ctx.lineJoin = 'round'
      
      const noteWidth = iconSize * 0.4
      const noteHeight = iconSize * 0.5
      const stemWidth = iconSize * 0.08
      const stemHeight = iconSize * 0.3
      
      // 第一个音符主体
      ctx.beginPath()
      ctx.ellipse(centerX - noteWidth * 0.3, centerY + noteHeight * 0.1, noteWidth * 0.5, noteHeight * 0.4, -0.2, 0, Math.PI * 2)
      ctx.fill()
      
      // 第一个音符杆
      ctx.beginPath()
      ctx.moveTo(centerX - noteWidth * 0.3 + noteWidth * 0.25, centerY - stemHeight * 0.5)
      ctx.lineTo(centerX - noteWidth * 0.3 + noteWidth * 0.25, centerY + noteHeight * 0.5)
      ctx.lineWidth = stemWidth
      ctx.stroke()
      
      // 第一个音符旗
      const flagX = centerX - noteWidth * 0.3 + noteWidth * 0.25
      const flagY = centerY - stemHeight * 0.5
      ctx.beginPath()
      ctx.moveTo(flagX, flagY)
      ctx.quadraticCurveTo(flagX + noteWidth * 0.4, flagY - noteHeight * 0.2, flagX + noteWidth * 0.5, flagY - noteHeight * 0.1)
      ctx.lineTo(flagX + noteWidth * 0.3, flagY + noteHeight * 0.1)
      ctx.quadraticCurveTo(flagX + noteWidth * 0.15, flagY - noteHeight * 0.05, flagX, flagY)
      ctx.fill()
      
      // 第二个音符
      const secondNoteX = centerX + noteWidth * 0.2
      const secondNoteY = centerY + noteHeight * 0.15
      ctx.beginPath()
      ctx.ellipse(secondNoteX, secondNoteY, noteWidth * 0.5, noteHeight * 0.4, -0.2, 0, Math.PI * 2)
      ctx.fill()
      
      ctx.beginPath()
      ctx.moveTo(secondNoteX + noteWidth * 0.25, secondNoteY - stemHeight * 0.6)
      ctx.lineTo(secondNoteX + noteWidth * 0.25, secondNoteY + noteHeight * 0.4)
      ctx.stroke()
      
      const buffer = canvas.toBuffer('image/png')
      writeFileSync(outputPath, buffer)
      
      console.log(`✅ 已创建默认图标: ${outputPath}`)
      console.log(`   背景: 纯白色`)
      console.log(`   图标: 紫色渐变音乐符号`)
      return outputPath
    } catch (canvasError) {
      console.log('⚠️  sharp 和 canvas 都不可用，创建简单占位图标...')
      return createPlaceholderPNG()
    }
  }
}

// 创建一个简单的占位 PNG（使用 Base64）
const createPlaceholderPNG = () => {
  // 这是一个 512x512 的简单紫色 PNG 图片的 Base64 编码
  // 这是一个最小的有效 PNG 文件（1x1 像素，紫色）
  const pngBase64 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=='
  
  // 创建一个更大的占位图（使用 Data URI 转换为 Buffer）
  const buffer = Buffer.from(pngBase64, 'base64')
  writeFileSync(outputPath, buffer)
  
  console.log(`✅ 已创建占位图标: ${outputPath}`)
  console.log('⚠️  这是一个占位图标，建议使用真实的图标文件')
  return outputPath
}

// 执行
(async () => {
  try {
    const iconPath = await createSimplePNG()
    console.log(`\n📁 图标文件位置: ${iconPath}`)
    console.log('\n💡 提示: 你可以用这个文件作为输入来生成所有格式的图标')
    console.log('   运行: npm run icon:generate build/default-icon.png')
  } catch (error) {
    console.error('❌ 创建图标失败:', error)
    process.exit(1)
  }
})()

